package com.ftg.learn.sys.user.controller;

import com.ftg.learn.comm.entity.sys.Employee;
import com.ftg.learn.comm.entity.sys.User;
import com.ftg.learn.sys.user.service.IEmployeeService;
import com.ftg.learn.sys.user.service.IUserService;
import com.ftg.learn.sys.user.service.impl.EmployeeServiceImpl;
import com.ftg.learn.util.AbstractController;
import com.ftg.learn.util.MD5;
import com.ftg.learn.util.ResBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * <p>
 *
 *     员工表的显示操作，要自己定义sql语句来完成 (本周完成)
 *     1 :  员的类型要用到字典表，所以显示的时候要与字典共同查询
 *     2 : 如果是学生的话要与班级联动
 *     员工编号，姓名，类型，班级名称
 *
 *     员工表的关联操作
 *        1 :  如果你是员工你有可能成为用户 ，员工的主键与用户的主键是一致 [创建用户] ，调用用户的添加操作
 *        2 : 如果员工删除了，那么我们的用户也要删除 ，用户角色中间表也要删除
 *
 * 员工表 前端控制器
 * </p>
 *
 * @author kangjx
 * @since 2022-10-30
 */
@Api(tags = "人员管理")
@RestController
@RequestMapping("/system/employee")
public class EmployeeController extends AbstractController<EmployeeServiceImpl, Employee> {

    @Resource
    IEmployeeService iEmployeeService;

    @Resource
    IUserService iUserService;

    private final String DEFAULT_PASSWORD = "888888";

    /**
     * 在人员列表当中，点击创建用户按钮，生成相应的用户
     * @param id  用户的主键，页面点击传递过来的
     * @param uaccount  可以页面传递，也可以通过emp_code生成，这个要看甲方要求
     * @return
     */
    @PostMapping("/craetUser")
    @ApiOperation("通过员工列表，点击创建生成用户")
    public ResBean createUser(
            @RequestParam("id") @ApiParam(value = "员工的主键",required = true)Integer id,
            @RequestParam("uaccount") @ApiParam(value = "帐号",required = true)String uaccount
    ){
        User user = new User();
        user.setId(id);
        user.setUaccount(uaccount);
        //md5加密问题
        user.setUpassword(MD5.encrypt2ToMD5(DEFAULT_PASSWORD));
        return ResBean.success(iUserService.save(user));
    }

    /**
     * 通过员工，删除用户 以及用户角色中间表
     * @param id
     * @return
     */
    @DeleteMapping("/delEmployeeWithUser")
    public ResBean delEmployeeWithUser(  @RequestParam("id") @ApiParam(value = "员工的主键",required = true)Integer id){
        return ResBean.success(iEmployeeService.delEmployeeWithUser(id));
    }

}
